package com.luyou.a09;

import lombok.Getter;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

/**
 * 如果对性能要求较高，则推荐使用后两种方式，前两种使用代理会有一定的性能损耗；如果不在乎那点性能损耗，则可以使用第一种方式，这种方式最简单。
 * @author 28336
 * @version 1.0
 * Create by 2023/12/27 8:42
 */
@Getter
@Component
public class E {

    /**
     * 使用@Lazy处理 多例F1只注入一次的问题
     */
    @Lazy
    @Autowired
    private F1 f1;

    /**
     * 使用 proxyMode = ScopedProxyMode.TARGET_CLASS 多例F1只注入一次的问题
     */
    @Autowired
    public F2 f2;

    @Autowired
    public ObjectFactory<F3> f3;

    public F3 getF3() {
        return f3.getObject();
    }

    @Autowired
    private ApplicationContext applicationContext;

    public F4 getF4() {
        return applicationContext.getBean(F4.class);
    }
}
